/*
 * 10-mar-2007 
 */
package futbol.tacticas.concursantes2007.Chuky.chuky.entrenador;

import java.awt.Point;
import java.util.ArrayList;
import java.util.Vector;

import futbol.tacticas.Comando;
import futbol.tacticas.SituacionJugadores;
import futbol.tacticas.concursantes2007.Chuky.chuky.equipo.*;
import futbol.tacticas.concursantes2007.Chuky.chuky.futbolista.*;

/**
 *
 * @author Joan Crosas
 */
public class Entrenador {
	public static final int DEFENSA = 1;
	public static final int ATAQUE = 2;
	
	private int tipoJuego;
	private ArrayList<Futbolista> misJugadores;
	private Balon balon;
	private Libreta libreta;
	
	/**
	 * 
	 */
	public Entrenador() {
		libreta = new Libreta();
		
		Futbolista f01 = new Portero00( libreta );
		Futbolista f02 = new Defensa01( libreta );
		Futbolista f03 = new Defensa02( libreta );
		Futbolista f04 = new CentroCampista03( libreta );
		Futbolista f05 = new CentroCampista04( libreta );
		Futbolista f06 = new CentroCampista05( libreta );
		Futbolista f07 = new CentroCampista06( libreta );
		Futbolista f08 = new Delantero07( libreta );
		Futbolista f09 = new Delantero08( libreta );
		Futbolista f10 = new Lateral09( libreta );
		Futbolista f11 = new Lateral10( libreta );
		
		
		misJugadores = new ArrayList<Futbolista>();
		misJugadores.add( f01 );
		misJugadores.add( f02 );
		misJugadores.add( f03 );
		misJugadores.add( f04 );
		misJugadores.add( f05 );
		misJugadores.add( f06 );
		misJugadores.add( f07 );
		misJugadores.add( f08 );
		misJugadores.add( f09 );
		misJugadores.add( f10 );
		misJugadores.add( f11 );
		
		balon = new Balon();
		
	}
	
	/**
	 * 
	 * @param situacionJugadores
	 * 
	 * @return Retorna el tipo de juego dependiendo si tengo el ban
	 * 		   <lu><li><code>ATAQUE</code>: mi equipo tiene el baln</li>
	 * 		   <li><code>DEFENSA</code>: mi equipo no tiene el baln</li></lu>
	 */
	public void prepararTactica( SituacionJugadores situacionJugadores ) {
		tipoJuego = DEFENSA;
		Point[] posicionMisJugadores = situacionJugadores.getMisJugadores();
		Point[] posicionContrarios = situacionJugadores.getContrario();
		
		// reestablecemos la pelota con la nueva informacin
		balon.setPosicion( situacionJugadores.getBola() );
		
		// reestablecemos las variables de los jugadores con la informacin actualizada
		for( int i = 0; i < misJugadores.size(); i++ ) {
			Futbolista miFutbolista = misJugadores.get( i );
			miFutbolista.setPosicion( posicionMisJugadores[i] );
			miFutbolista.setBalon( balon );
			miFutbolista.setPosicionAmigos( posicionMisJugadores );
			miFutbolista.setPosicionEnemigos( posicionContrarios );
			
			miFutbolista.refresh();
			
			// si algno de nuestros jugadores posee el baln: atacamos
			if( miFutbolista.isBalonControlado() ) {
				tipoJuego = ATAQUE;
			}
		}
		
		for( int i = 0; i < misJugadores.size(); i++ ) {
			Futbolista miFutbolista = misJugadores.get( i );
			miFutbolista.setTipoJuego( tipoJuego );
		}
		
		if( tipoJuego == DEFENSA ) {
			libreta.abortar();
		}
		
		if( libreta.isAnotacionEnCurso() ) {
			Anotacion[] anotacion = libreta.getAnotacion();
			for( int i = 0; i < anotacion.length; i++ ) {
				Futbolista miFutbolista = anotacion[i].getFutbolista();
				miFutbolista.repasarAnotacion( anotacion[i] );
			}
		}
		
		for( int i = 0; i < misJugadores.size(); i++ ) {
			Futbolista miFutbolista = misJugadores.get( i );
			miFutbolista.prepararAccion( misJugadores );
		}
		
	}
	
	public Vector<Comando> getComandos() {
		Vector<Comando> comandos = new Vector<Comando>();
		
		for( int i = 0; i < misJugadores.size(); i++ ) {
			comandos.add( misJugadores.get( i ).getAccion().getComando() );
		}
		
		return comandos;
	}
	
	public ArrayList<Futbolista> getFutbolistas() {
		return misJugadores;
	}
	



	
	

}
